import type { MapperConfig } from "@/lib/api";
import type { AvailableMapper } from "./types";
import { asKeyMapper } from "./key";

export * from "./types";

export * from "./empty";
export * from "./key";

/**
 * 判断映射器是否可用，或使得其作为可用的 Mapper。
 * 需要注意，该检查会修改映射器的名称等必要信息，以便于后续的规范操作。
 * @param mapper 映射器配置
 * @returns 若映射器可用，则返回 AvailableMapper，否则返回 undefined
 */
export function asAvailableMapper(mapper: MapperConfig): AvailableMapper | undefined {
    switch (mapper.name.toLowerCase()) {
        case "emptymapper":
        case "defaultmapper":
            // 空映射默认可用
            // 名称规范化
            return { name: "EmptyMapper" };
        case "keymapper":
            // 键盘映射器
            return asKeyMapper(mapper);
        default:
            // 未知的映射一律不可用
            return undefined;
    }
}
